package com.itheima.algorithm.sort;

import java.util.Arrays;

/**
 * 递归冒牌排序
 * 将数组划分为两部分,[0...j] [j+1,... a.length-1]
 * 左边[0..j]未排序的部分
 * 右边[j+1,... a.length-1] 已排序的部分
 * 未排序取余,相邻的两个元素,如果前一个大于后一个,则交换位置
 */
public class BubbleSort {

    public static void sort(int[] a) {
//        bubble1(a, a.length - 1);
        bubble2(a, a.length - 1);
    }

    /**
     * 未排序的数组
     *
     * @param a 数组
     * @param j 未排序区域右边界
     */
    private static void bubble1(int[] a, int j) {
        if (j == 0) {
            return;
        }
        for (int i = 0; i < j; i++) {
            if (a[i] > a[i + 1]) {
                int temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
        bubble1(a, j - 1);
    }

    /**
     *
     * @param a 数组
     *      * @param j 未排序区域右边界
     */
    private static void bubble2(int[] a, int j) {
        if (j == 0) {
            return;
        }
        int x = 0;
        for (int i = 0; i < j; i++) {
            if (a[i] > a[i + 1]) {
                int temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
                x = i;
            }
        }
        bubble2(a, x);
    }

    public static void main(String[] args) {
        int[] a1 = {5, 4, 23, 2, 1};
        sort(a1);
        System.out.println(Arrays.toString(a1));
    }
}
